import SocketServer
import threading
import thread
import ee3
import ee3_gui
from System.Windows.Threading import *
from System.Threading import *
from System import *

class socket(object):

    def __init__(self):
        t = threading.Thread(target=self.serve_on_port, args=[9999])
        t.setDaemon(True)
        t.start()
        
    def serve_on_port(self, port):
        HOST, PORT = "127.0.0.1", 9999
        server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
        print("Streznik TCP zagnan!")
        server.serve_forever()
        

# socket funkcije
class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        self.podatki = self.data.split(' ')
        serijska=None
        pozicija=None
        for atribut in range(0, self.podatki.Count):
            vrednost = self.value(self.podatki[atribut])
            if (self.podatki[atribut].startswith("--dummy=")):
                ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object](self.dummystevilka), vrednost)
            if (self.podatki[atribut].startswith("--operater=")):
                ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object](self.operater), vrednost)
            if (self.podatki[atribut].startswith("--operacija=")):
                ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object](self.operacija), vrednost)
            if (self.podatki[atribut].startswith("--positions=")):
                ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object](self.positions), vrednost)
            if (self.podatki[atribut].startswith("--serijska=")):
                serijska=vrednost
            if (self.podatki[atribut].startswith("--pozicija=")):
                pozicija=vrednost

        for atribut in range(0, self.podatki.Count):
            vrednost = self.value(self.podatki[atribut])
            if (self.podatki[atribut].startswith("--status=")):
                if (vrednost == "TESTING" and pozicija != None):
                    ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object, object, object, object](ee3_gui.update_plosce), pozicija, serijska, vrednost, None)
                elif (vrednost == "INIT"):    
                    ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object, object, object, object](ee3_gui.update_plosce), pozicija, serijska, vrednost, None)
                elif ((vrednost == "PASS" or vrednost == "FAIL" or vrednost == "FINISH") and serijska != None and procesna != None):
                    ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object, object, object, object](ee3_gui.update_plosce), pozicija, serijska, vrednost, None)

            elif (self.podatki[atribut].startswith("--komentar=")):
                if (serijska != None and pozicija != None):
                    ee3.obrazec.Dispatcher.Invoke(DispatcherPriority.Background, Action[object, object, object, object](ee3_gui.update_plosce), pozicija, serijska, None, vrednost)

    def value(self, mystr):
        return mystr[mystr.find("=")+1 : ]

    def dummystevilka(self, stevilka):
        ee3.obrazec.textBox_dummyprocesna.Text = stevilka
        ee3.dummyprocesna_accepted()

    def operater(self, stevilka):
        for operater in ee3.obrazec.comboBox_operaterji.Items:
            if (operater.ToString().IndexOf(stevilka) == 0):
                ee3.obrazec.comboBox_operaterji.SelectedItem = operater
                return

    def operacija(self, stevilka):
        for operacija in ee3.obrazec.comboBox_operacije.Items:
            if (operacija.ToString().IndexOf(stevilka) == 0):
                ee3.obrazec.comboBox_operacije.SelectedItem = operacija
                return

    def positions(self, pozicije):
        ee3_gui.paralelno_environment(pozicije)